package test.enba.openfeign.client;

import java.util.List;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import test.enba.openfeign.client.req.User;

/**
 * 1.如果未指定 url 属性，Feign 会通过 name 属性从服务注册中心查找对应的服务实例
 *
 * <p>2.当有多个 Feign 客户端指向同一个服务（即 name 相同）时，可以使用 contextId 来区分它们
 */
@FeignClient(
    name = "user-service",
    contextId = "UserServiceClient",
    url = "http://localhost:8093",
    path = "/users")
public interface UserServiceClient {

  // 根据用户 ID 获取用户信息
  @GetMapping("/{id}")
  User getUserById(@PathVariable("id") Long id);

  // 获取所有用户信息
  @GetMapping("")
  List<User> getAllUsers();

  // 创建新用户
  @PostMapping("")
  User createUser(@RequestBody User user);

  // 更新用户信息
  @PutMapping("/{id}")
  User updateUser(@PathVariable("id") Long id, @RequestBody User user);

  // 删除用户
  @DeleteMapping("/{id}")
  void deleteUser(@PathVariable("id") Long id);
}
